home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1998 May
/
EnigmA AMIGA RUN 27 (1998)(G.R. Edizioni)(IT)[!][issue 1998-05].iso
/
earcd
/
sinclair-ql
/
c68patch_bas
< prev
next >
Wrap
Text File
|
1998-02-23
|
3KB
|
92 lines
10 TURBO_objfil "ram1_C68PATCH_task"
11 TURBO_taskn "C68PATCH"
12 TURBO_repfil "scr"
13 TURBO_windo 0
14 TURBO_diags 'omit'
15 TURBO_struct "S"
16 TURBO_model "<"
17 TURBO_objdat 10
18 TURBO_optim "R"
19 :
1000 REMark ------------------------------
1010 REMark C68PATCH_bas - Mark J Swift
1020 REMark ------------------------------
1030 :
1040 DIM InFile$(100),verstag$(4),d$(8)
1050 verstag$="1.01"
1060 OPEN#3;"Con_456x134a28x62"
1070 REPeat outer_loop
1080 WINDOW#3;456,144,28,57:PAPER#3;0:INK#3;7:CLS#3:BORDER#3;3,2:BORDER#3;2,0:BORDER#3;1,2:WINDOW#3;438,130,36,64
1090 CSIZE#3;2,1:PRINT#3;"C68PATCH v";verstag$:CSIZE#3;0,0
1100 PRINT#3;"C68 compiled code patcher by MARK J SWIFT"
1110 PRINT#3;\"Fixes CACHE problems on 68040 and 68060 processors."
1120 PRINT#3;\"Current tasks compiled with the C68 compiler fail when COPYBACK is"
1130 PRINT#3;"enabled. This program is a quick cure. The bug has been reported so"
1140 PRINT#3;"this utility may become redundant the next time C68 is updated."
1150 INPUT#3;\"INPUT NAME OF C68 TASK TO FIX ? ";InFile$
1160 IF InFile$="" THEN EXIT outer_loop
1170 OPEN_IN#6;InFile$
1180 fd=0:fl=FLEN(#6):ft=FTYP(#6):IF ft THEN fd=FDAT(#6)
1190 CLOSE#6
1200 IF fl=0 THEN
1210 PRINT#3;\"File empty!"&CHR$(10)
1220 IF InFlg%=0 THEN EXIT main_loop
1230 ELSE
1240 IF fd=0 THEN
1250 PRINT#3;\"Not an executable task!"
1260 ELSE
1265 plen=108
1270 ad=ALCHP(fl+plen)
1275 a=ad
1280 LBYTES InFile$,a+plen
1281 REMark Check if patched by earlier patcher
1282 IF (PEEK_L(a+plen+120+472)=HEX("6000FDE2")) AND (PEEK_L(a+plen+120+498)=HEX("6000FDEE")) THEN
1283 PRINT#3;\"Removing outdated patch"
1284 POKE_L a+plen+120+472,HEX("70000C2E")
1285 POKE_L a+plen+120+498,HEX("4A80670E")
1286 a=a+120
1287 fl=fl-120
1288 END IF
1289 REMark check if a valid C68 program
1290 Flg%=0
1300 IF PEEK_L(a+plen+472)=HEX("70000C2E") THEN
1310 IF PEEK_L(a+plen+476)=HEX("002000A1") THEN
1320 IF PEEK_L(a+plen+498)=HEX("4A80670E") THEN
1330 IF PEEK_L(a+plen+502)=HEX("0C2E0040") THEN
1340 IF PEEK_W(a+plen+506)=HEX("00A1") THEN
1350 Flg%=NOT(0)
1360 END IF
1370 END IF
1380 END IF
1390 END IF
1400 END IF
1410 IF Flg% THEN
1420 RESTORE 1630
1430 FOR i=0 TO plen-4 STEP 4
1440 READ d$
1450 POKE_L a+i,HEX(d$)
1460 END FOR i
1470 POKE_L a+plen+472,HEX("6000FDEC")
1480 POKE_L a+plen+498,HEX("6000FDD4")
1490 DELETE InFile$
1500 SEXEC InFile$,a,fl+plen,fd
1510 PRINT#3;\"TASK successfully patched"
1520 ELSE
1530 PRINT#3;\"Sorry, I don't recognise this task"
1540 END IF
1550 RECHP ad
1560 END IF
1570 END IF
1580 PAUSE 150
1590 END REPeat outer_loop
1600 CLOSE#3
1610 STOP
1620 REMark m/c patches
1630 DATA "60260000","00004AFB","0006435F","50524F47"
1640 DATA "00000000","00000000","00000000","00000000"
1650 DATA "00000000","00000000","706CDDC0","99C09BC0"
1660 DATA "603A7000","2F010C2E","001000A1","632A4E7A"
1670 DATA "1002C340","00410808","0C2E0030","00A16314"
1680 DATA "4A406A02","F4B84A80","6A06F478","4A816B02"
1690 DATA "F458F498","4E7B1002","221F4E75"